using System;
using System.Collections.Generic;

class PrimeSieve
{
    // 实现埃氏筛法的算法逻辑，返回 2 到指定上限范围内的素数列表
    static List<int> SieveOfEratosthenes(int limit)
    {
        // 用于标记每个数是否为素数，初始都认为是素数（true）
        bool[] isPrime = new bool[limit + 1];
        for (int i = 2; i <= limit; i++)
        {
            isPrime[i] = true;
        }

        // 从 2 开始，将其倍数标记为非素数
        for (int p = 2; p * p <= limit; p++)
        {
            if (isPrime[p])
            {
                for (int i = p * p; i <= limit; i += p)
                {
                    isPrime[i] = false;
                }
            }
        }

        // 收集标记为素数的数到列表中
        List<int> primes = new List<int>();
        for (int i = 2; i <= limit; i++)
        {
            if (isPrime[i])
            {
                primes.Add(i);
            }
        }

        return primes;
    }

    // 输入输出的方法
    static void InputOutput()
    {
        int limit = 100;
        // 调用算法逻辑方法获取素数列表
        List<int> primeNumbers = SieveOfEratosthenes(limit);

        Console.WriteLine($"2 到 {limit} 以内的素数有：");
        foreach (int prime in primeNumbers)
        {
            Console.Write(prime + " ");
        }
        Console.WriteLine();
    }

    static void Main()
    {
        // 调用输入输出方法
        InputOutput();
    }
}